package com.atguigu.tingshu.consumer;





import com.atguigu.tingshu.constant.MqConst;
import com.atguigu.tingshu.service.MqService;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

//@Component
//@Slf4j
//public class CdcCacheKeyReceiver {
//    @Autowired
//    private MqService mqService;
//    @Autowired
//    private StringRedisTemplate redisTemplate;
//    @SneakyThrows   // 可以绕开编译期间的异常 等运行时发现异常才抛出
//    @RabbitListener(bindings = @QueueBinding(
//            exchange = @Exchange(
//                    value = MqConst.EXCHANGE_ALBUM,
//                    type = "direct",
//                    durable = "true"
//            ),
//            value = @Queue(
//                    value = MqConst.QUEUE_ALBUM_STAT_UPDATE,
//                    durable = "true",
//                    exclusive = "false"
//            ),
//            key = MqConst.ROUTING_ALBUM_STAT_UPDATE
//    ))
//    public void listenAlbumInfo(String cacheKey, Message message, Channel channel){
//        long deliveryTag = message.getMessageProperties().getDeliveryTag();
//        if (!StringUtils.hasText(cacheKey)) {
//            channel.basicNack(deliveryTag, false, false);
//            throw new GuiguException(201, "消息为空");
//        }
//
//        try {
//            mqService.listenAlbumInfo(cacheKey);
//            channel.basicAck(deliveryTag, false);
//        } catch (GuiguException e) {
//            // 重试消息消费
//            //
//            String retryMsgKey = "retry:msg:" + cacheKey;
//            Long count = redisTemplate.opsForValue().increment(cacheKey);
//            if (3 >= count) {
//                log.error("消息重试了{}次", count);
//                channel.basicNack(deliveryTag, false, true);
//            } else {
//                log.error("消息重试了{}次，异常原因：{}，请人工排查", count, e.getMessage());
//                channel.basicNack(deliveryTag, false, false);
//            }
//        } catch (Exception e) {
//            log.error("手动应答期间，网络出现了抖动，但是业务已经被成功执行过，消息直接丢掉");
//            channel.basicNack(deliveryTag, false, false);
//        }
//    }
//}
